package model;

import utils.Images;

import java.awt.*;

/**
 * 火球类，有自动火球和普通火球的，通过不同的构造方法来区分
 */
public class Fireball extends MovingObject implements Score {
    int size = 20;
    int index = 1;
    boolean isFlying = false;

    Skeleton skeleton;

    /**
     * 普通火球的构造方法
     *
     * @param bird
     */
    Fireball(Bird bird) {
        super(bird.x, bird.y, Images.fireball.getWidth(null), Images.fireball.getHeight(null));
    }

    /**
     * 自动火球的构造方法，该火球会自动向骷髅移动
     *
     * @param bird
     * @param skeleton 骷髅对象
     */
    Fireball(Bird bird, Skeleton skeleton) {
        super(bird.x, bird.y, Images.fireball.getWidth(null), Images.fireball.getHeight(null));
        this.skeleton = skeleton;
    }

    /**
     * 普通火球的飞行方法
     */
    public void fly() {
        //对index的值进行约束，防止index的值发生溢出
        if (index == 120) {
            index = 1;
        }
        Images.fireball = Images.fireballImages[(index / 6) % 30];
        index++;
    }

    /**
     * 自动火球的飞行方法
     */
    public void autoFly() {
        //对index的值进行约束，防止index的值发生溢出
        if (index == 120) {
            index = 1;
        }
        /*每绘制6遍切换下一张图片*/
        Images.autoFireball = Images.autoFireballImages[(index / 6) % 30];
        index++;
    }

    /**
     * 定义普通火球的移动
     */
    @Override
    public void step() {
        x += 6;
        if (x - width / 2 > 880) {
            isFlying = false;
        }
    }

    /**
     * 定义自动火球的移动，会向最近的骷髅进发
     */
    public void autoStep() {
        //Sx 骷髅和自动火球间的横轴距离
        //Sy 骷髅和自动火球间的纵轴距离
        //t  火球水平位移到骷髅对象位置需要的时间
        int Sx = (skeleton.x + skeleton.width) - x;
        int Sy = skeleton.y - y;
        int t;

        //计算水平位移所需时间
        if (Sx / 8 >= 0) {
            t = Sx / 8;
        } else {
            t = 0;
        }

        y += Sy / (t + 1);//设置垂直位移速度
        x += 8;//水平位移速度
    }

    /**
     * @return 火球在与骷髅发生碰撞后分数加10
     */
    @Override
    public int getScore() {
        return 10;
    }
}
